home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / xlib / yicons24 / sounds / moo.voc < prev   
Text File  |  1990-05-05  |  38KB  |  1,263 lines

  1.  := 0;
  2.       end;
  3.     end;
  4.   end;
  5.   WaitToGo;
  6. end; { UserLineStylePlay }
  7.  
  8.  
  9. procedure SayGoodbye;
  10. { Say goodbye and then exit the program }
  11. var
  12.   ViewInfo : ViewPortType;
  13. begin
  14.   MainWindow('');
  15.   GetViewSettings(ViewInfo);
  16.   SetTextStyle(TriplexFont, HorizDir, 4);
  17.   SetTextJustify(CenterText, CenterText);
  18.   with ViewInfo do
  19.     OutTextXY((x2-x1) div 2, (y2-y1) div 2, 'That''s all folks!');
  20.   StatusLine('Press any key to quit...');
  21.   repeat until KeyPressed;
  22. end; { SayGoodbye }
  23.  
  24.  
  25. PROCEDURE SelectMode;
  26. VAR
  27.     choice1,choice2     : CHAR;
  28.    xsize,ysize            : WORD;
  29. BEGIN
  30.     (* Let's select a mode *)
  31.     ClrScr;
  32.     WriteLn('VESADEMO:');
  33.     WriteLn('1. 256 colors');
  34.     WriteLn('2. 32768 colors');
  35.     WriteLn('3. 65536 colors');
  36.     WriteLn('4. 16777216 colors');
  37.     WriteLn('Q uit');
  38.     WriteLn;
  39.     Write('Your choice: ');
  40.     REPEAT
  41.         ReadLn(choice1);
  42.       IF choice1 <> '1' THEN BEGIN
  43.           WriteLn('Sorry !');
  44.          WriteLn('This demo wasn''t written for more as 256 colors !');
  45.          WriteLn('You would only get a limited impression of the Hi-& TrueColor modes...');
  46.          WriteLn('Switching to 256 colors.');
  47.          choice1 := '1';
  48.       END;
  49.     UNTIL choice1 IN ['1'..'4','q'];
  50.     IF choice1 = 'q' THEN Halt;
  51.  
  52.     WriteLn;
  53.     WriteLn;
  54.     WriteLn('a. 320x200');
  55.     WriteLn('b. 640x480');
  56.     WriteLn('c. 800x600');
  57.     WriteLn('d. 1024x768');
  58.     WriteLn('e. 1280x1024');
  59.     WriteLn('Q uit');
  60.     WriteLn;
  61.     Write('Your choice: ');
  62.     REPEAT
  63.         ReadLn(choice2);
  64.     UNTIL choice2 IN ['a'..'e','q'];
  65.     IF choice2 = 'q' THEN Halt;
  66.  
  67.     CASE choice2 OF
  68.         'a' : BEGIN
  69.             xsize := 320;
  70.             ysize := 200;
  71.         END;
  72.         'b' : BEGIN
  73.             xsize := 640;
  74.             ysize := 480;
  75.         END;
  76.         'c' : BEGIN
  77.             xsize := 800;
  78.             ysize := 600;
  79.         END;
  80.         'd' : BEGIN
  81.             xsize := 1024;
  82.             ysize := 768;
  83.         END;
  84.         'e' : BEGIN
  85.             xsize := 1280;
  86.             ysize := 1024;
  87.         END;
  88.     END;
  89.     CASE choice1 OF
  90.         '1' : mode := FindVesaMode(xsize,ysize,8);
  91.         '2' : mode := FindVesaMode(xsize,ysize,15);
  92.         '3' : mode := FindVesaMode(xsize,ysize,16);
  93.         '4' : mode := FindVesaMode(xsize,ysize,24);
  94.     END;
  95.     IF mode = 0 THEN BEGIN
  96.         WriteLn('No such mode could be found !');
  97.         WriteLn('Switching to to 320x200.');
  98.         ReadKey;
  99.         mode := V320x200x256;
  100.     END;
  101. END;
  102.  
  103. begin { program body }
  104.   SelectMode;
  105.   Initialize;
  106.   ReportStatus;
  107.  
  108. {  AspectRatioPlay; }
  109.   FillEllipsePlay;
  110.   SectorPlay;
  111.   WriteModePlay;
  112.  
  113.   ColorPlay;
  114.   { PalettePlay only intended to work on these drivers: }
  115.   if (GraphDriver = EGA) or
  116.       (GraphDriver = EGA64) or
  117.       (GraphDriver = VGA) then
  118.      PalettePlay;
  119.   PutPixelPlay;
  120. {  PutImagePlay; }
  121.   RandBarPlay;
  122.   BarPlay;
  123.   Bar3DPlay;
  124.   ArcPlay;
  125.   CirclePlay;
  126.   PiePlay;
  127.   LineToPlay;
  128.   LineRelPlay;
  129. {  LineStylePlay; }
  130. {  UserLineStylePlay; }
  131.   TextDump;
  132.   TextPlay;
  133.   CrtModePlay;
  134.   FillStylePlay;
  135.   FillPatternPlay;
  136.   PolyPlay;
  137.   SayGoodbye;
  138. {  CloseGraph; }
  139.   CloseVesa;
  140. end.
  141. ***************************************************
  142.     '* SHOW D2ROTATE (ABOUT THE ORIGIN)
  143.     '****************************************************************∞╥≤c≤*φè#^│v/╒:j═φ0t+l▓ô"¬"g└≡?%ªêΣ│H╫½╫╜├¿U'╒⌐⌡ ßV?╩¬ujOΦçEZ1∞▐! ▄B╛Σ8║æ]1GlNÜ┐q▌▓;ô$ΦzE<cª*bEô#ä╧ñÅ"∩─LrdaÖ ╠º╫a^¥£å╬1~)@ëÖMδ╫0═6DäFê¬Çv┼ß╨kæpτ╪É)}ª 1w3╤╧ü⌡¥╓h▓╣≈ïÅaÑ[TⁿHqªÉ╝DKÄ─Y-∞tT╤Θ╨º╟╪.*ÇI9lΦ≈{πτcσ$τπßoFr╪╨∩┼╞╟;O2■e²LÜ4^N|╪½ÅO?╔°FOz`╟╟╟'<>>π$πΘù6·Xgî╖│°oîδπGƒd╝▀░?■╪╔_9L ⌡ôⁿq'æO▀ƒn4╔▀╚▄┼3pτ.òO°·}÷╕ⁿ±'æO?ít│!√8ßÑ≤/┐╣p┼≥┘E╦Vox╕cΦé5╟╚º╙$?√$≥ΘZεsî≡åìΓpKù¢ïß X╥ 9╞≈\µk┤O¥_ 5Üö\≤éÄ┌╤A[╤ÿáï┼éNⁿÅu16    g,%hc╙╨cD╨Vï┘R¢öKñR;8εáΣ╢╪ós╤π╡á└èxgzPÄMú╫yαºÉ+σJ¢i+▓â3╥    ═Ñ╙î^ºG▓█πérφçs %#(╗⌠?┼%u8≡6+QÉ))ò)Afw≈╣╪)B&4░åLXV:δät@Å.;5Φf╢Ät┐ΣJ╫─U8úÇ╟éö£╕p╔┴⌠vg╨╬╥é÷╪╣┬ΓI.ç≡^v╤ZΦÇ& ╒┌6ñô6XßNè╡╬E₧Ñ
  144. kIº╠▄A+╣╥éb²tæ-Y¡½αÑa═uuîÇ╢αêvhuª╡SÅ┤vèùú¥F;p<d⌐/F─d█éT%▓KΦû=q■öI┐ ┐╠6S$▒÷╚ENΩ¥Fû9╔┌R'╝ ╧φ└?g┬j▓0═/b╖₧─mûé╢┌»ÿÄë/·<éò■░╤╟╢├Xσ:╥P3Θ"╬Læsφ░┌öSö!╗¿*mN£WΣÇ£┤~#╗ææ≥RΩóh:à▌.æ≈╕▌v£äàd▒à╒├=░╖π║$howeg*╬    6ù▄ƒô╕φ░Ö╢qΘD>(w@úKεHÆ╛öúΣU
  145. éÜR╔╤W▄èê 2M%ó.▓SNÖA1ùJE╢║l]▓¿>\%└Å4ßO▄£â⌐& ê/)8vSP▀▓ôⁿææ√ü√ÑÄa⌠â╚4S╓╟P- ?Σá╕▓Næ*q╡UΘ▓≈^ñ·I.rúR&$Y^╚%è≡B┌≈Ceat
  146.     Color := RandColor;
  147.     SetColor(Color);
  148.     SetFillStyle(Random(CloseDotFill)+1, Color);
  149.     Bar3D(Random(MaxWidth), Random(MaxHeight),
  150.           Random(MaxWidth), Random(MaxHeight), 0, TopOff);
  151.   until KeyPressed;
  152.   WaitToGo;
  153. end; { RandBarPlay }
  154.  
  155. procedure ArcPlay;
  156. { Draw random arcs on the screen }
  157. var
  158.   MaxRadius : word;
  159.   EndAngle : word;
  160.   ArcInfo : ArcCoordsType;
  161. begin
  162.   MainWindow('Arc / GetArcCoords demonstration');
  163.   StatusLine('Esc aborts or press a key');
  164.   MaxRadius := MaxY div 10;
  165.   repeat
  166.     SetColor(RandColor);
  167.     EndAngle := Random(360);
  168.     SetLineStyle(SolidLn, 0, NormWidth);
  169.     Arc(Random(MaxX), Random(MaxY), Random(EndAngle), EndAngle, Random(MaxRadius));
  170.     GetArcCoords(ArcInfo);
  171.     with ArcInfo do
  172.     begin
  173.       Line(X, Y, XStart, YStart);
  174.       Line(X, Y, Xend, Yend);
  175.     end;
  176.   until KeyPressed;
  177.   WaitToGo;
  178. end; { ArcPlay }
  179.  
  180. procedure PutPixelPlay;
  181. { Demonstrate the PutPixel and GetPixel commands }
  182. const
  183.   Seed   = 1962; { A seed for the random number generator }
  184.   NumPts = 2000; { The number of pixels plotted }
  185.   Esc    = #27;
  186. var
  187.   I : word;
  188.   X, Y, Color : word;
  189.   XMax, YMax  : integer;
  190.   ViewInfo    : ViewPortType;
  191. begin
  192.   MainWindow('PutPixel / GetPixel demonstration');
  193.   StatusLine('Esc aborts or press a key...');
  194.  
  195.   GetViewSettings(ViewInfo);
  196.   with ViewInfo do
  197.   begin
  198.     XMax := (x2-x1-1);
  199.     YMax := (y2-y1-1);
  200.   end;
  201.  
  202.   while not KeyPressed do
  203.   begin
  204.     { Plot random pixels }
  205.     RandSeed := Seed;
  206.     I := 0;
  207.     while (not KeyPressed) and (I < NumPts) do
  208.     begin
  209.       Inc(I);
  210.         PutPixel(Random(XMax)+1, Random(YMax)+1, RandColor);
  211.     end;
  212.  
  213.     { Erase pixels }
  214.     RandSeed := Seed;
  215.     I := 0;
  216.     while (not KeyPressed) and (I < NumPts) do
  217.     begin
  218.       Inc(I);
  219.       X := Random(XMax)+1;
  220.       Y := Random(YMax)+1;
  221.       Color := GetPixel(X, Y);
  222.         if Color = RandColor then
  223.           PutPixel(X, Y, 0);
  224.      end;
  225.   end;
  226.   WaitToGo;
  227. end; { PutPixelPlay }
  228.  
  229. procedure PutImagePlay;
  230. { Demonstrate the GetImage and PutImage commands }
  231.  
  232. const
  233.   r  = 20;
  234.   StartX = 100;
  235.   StartY = 50;
  236.  
  237. var
  238.   CurPort : ViewPortType;
  239.  
  240. procedure MoveSaucer(var X, Y : integer; Width, Height : integer);
  241. var
  242.   Step : integer;
  243. begin
  244.   Step := Random(2*r);
  245.   if Odd(Step) then
  246.     Step := -Step;
  247.   X := X + Step;
  248.   Step := Random(r);
  249.   if Odd(Step) then
  250.     Step := -Step;
  251.   Y := Y + Step;
  252.  
  253.   { Make saucer bounce off viewport walls }
  254.   with CurPort do
  255.   begin
  256.     if (x1 + X + Width - 1 > x2) then
  257.       X := x2-x1 - Width + 1
  258.     else
  259.       if (X < 0) then
  260.         X := 0;
  261.     if (y1 + Y + Height - 1 > y2) then
  262.       Y := y2-y1 - Height + 1
  263.     else
  264.       if (Y < 0) then
  265.         Y := 0;
  266.   end;
  267. end; { MoveSaucer }
  268.  
  269. var
  270.   Pausetime : word;
  271.   Saucer    : pointer;
  272.   X, Y      : integer;
  273.   ulx, uly  : word;
  274.   lrx, lry  : word;
  275.   Size      : word;
  276.   I         : word;
  277. begin
  278.   ClearDevice;
  279.   FullPort;
  280.  
  281.   { PaintScreen }
  282.   ClearDevice;
  283.   MainWindow('GetImage / PutImage Demonstration');
  284.   StatusLine('Esc aborts or press a key...');
  285.   GetViewSettings(CurPort);
  286.  
  287.   { DrawSaucer }
  288.   Ellipse(StartX, StartY, 0, 360, r, (r div 3)+2);
  289.   Ellipse(StartX, StartY-4, 190, 357, r, r div 3);
  290.   Line(StartX+7, StartY-6, StartX+10, StartY-12);
  291.   Circle(StartX+10, StartY-12, 2);
  292.   Line(StartX-7, StartY-6, StartX-10, StartY-12);
  293.   Circle(StartX-10, StartY-12, 2);
  294.   SetFillStyle(SolidFill, MaxColor);
  295.   FloodFill(StartX+1, StartY+4, GetColor);
  296.  
  297.   { ReadSaucerImage }
  298.   ulx := StartX-(r+1);
  299.   uly := StartY-14;
  300.   lrx := StartX+(r+1);
  301.   lry := StartY+(r div 3)+3;
  302.  
  303.   Size := ImageSize(ulx, uly, lrx, lry);
  304.   GetMem(Saucer, Size);
  305.   GetImage(ulx, uly, lrx, lry, Saucer^);
  306. {  PutImage(ulx, uly, Saucer^, XORput);               { erase image }
  307.  
  308.   { Plot some "stars" }
  309.   for I := 1 to 1000 do
  310.      PutPixel(Random(MaxX), Random(MaxY), RandColor);
  311.   X := MaxX div 2;
  312.   Y := MaxY div 2;
  313.   PauseTime := 70;
  314.  
  315.   { Move the saucer around }
  316.   repeat
  317. {     PutImage(X, Y, Saucer^, XORput);                 { draw image }
  318.      Delay(PauseTime);
  319. {     PutImage(X, Y, Saucer^, XORput);                 { erase image }
  320.      MoveSaucer(X, Y, lrx - ulx + 1, lry - uly + 1);  { width/height }
  321.   until KeyPressed;
  322.   FreeMem(Saucer, size);
  323.   WaitToGo;
  324. end; { PutImagePlay }
  325.  
  326. procedure PolyPlay;
  327. { Draw random polygons with random fill styles on the screen }
  328. const
  329.   MaxPts = 5;
  330. type
  331.   PolygonType = array[1..MaxPts] of PointType;
  332. var
  333.   Poly : PolygonType;
  334.   I, Color : word;
  335. begin
  336.   MainWindow('FillPoly demonstration');
  337.   StatusLine('Esc aborts or press a key...');
  338.   repeat
  339.     Color := RandColor;
  340.     SetFillStyle(Random(11)+1, Color);
  341.     SetColor(Color);
  342.     for I := 1 to MaxPts do
  343.       with Poly[I] do
  344.       begin
  345.         X := Random(MaxX);
  346.         Y := Random(MaxY);
  347.       end;
  348.     FillPoly(MaxPts, Poly);
  349.   until KeyPressed;
  350.   WaitToGo;
  351. end; { PolyPlay }
  352.  
  353. procedure FillStylePlay;
  354. { Display all of the predefined fill styles available }
  355. var
  356.   Style    : word;
  357.   Width    : word;
  358.   Height   : word;
  359.   X, Y     : word;
  360.   I, J     : word;
  361.   ViewInfo : ViewPortType;
  362.  
  363. procedure DrawBox(X, Y : word);
  364. begin
  365.   SetFillStyle(Style, MaxColor);
  366.   with ViewInfo do
  367.     Bar(X, Y, X+Width, Y+Height);
  368.   Rectangle(X, Y, X+Width, Y+Height);
  369.   OutTextXY(X+(Width div 2), Y+Height+4, Int2Str(Style));
  370.   Inc(Style);
  371. end; { DrawBox }
  372.  
  373. begin
  374.   MainWindow('Pre-defined fill styles');
  375.   GetViewSettings(ViewInfo);
  376.   with ViewInfo do
  377.   begin
  378.     Width := 2 * ((x2+1) div 13);
  379.     Height := 2 * ((y2-10) div 10);
  380.   end;
  381.   X := Width div 2;
  382.   Y := Height div 2;
  383.   Style := 0;
  384.   for J := 1 to 3 do
  385.   begin
  386.     for I := 1 to 4 do
  387.     begin
  388.       DrawBox(X, Y);
  389.       Inc(X, (Width div 2) * 3);
  390.     end;
  391.     X := Width div 2;
  392.     Inc(Y, (Height div 2) * 3);
  393.   end;
  394.   SetTextJustify(LeftText, TopText);
  395.   WaitToGo;
  396. end; { FillStylePlay }
  397.  
  398. procedure FillPatternPlay;
  399. { Display some user defined fill patterns }
  400. const
  401.   Patterns : array[0..11] of FillPatternType = (
  402.   ($AA, $55, $AA, $55, $AA, $55, $AA, $55 üÖü üÖü  !BBäx!!!BBäx!BBäx"""DDêp""DDêp>"""BBääêp""!"BDäêêp>IÉÆ|      ° @≥î>00>><Dêx  !BBäx""DDêp&<"DDêê&22TTêêê$> $< @äêp>          ⁿBBBB<  @@Ç****DDDDDDDU¬U¬U¬U¬U¬U¬U¬▌w▌w▌w▌w▌w▌w▌w°°°≥■°°≥≥■≥≥■■°°°    ≤  ≤  ≤≤         °                     ≡≡≡≡≡≡≡≡≡≡≡≡≡≡       ;DDD;    $"Bdÿ>@@@>||>Ac]AAA1N"A""2,  `1NA"*III*<Bü üB<<BüüüB<A" \"QIE" < <BBBB  @@    ~ ?  @ÇB$$B ""A$$"AII6 üBr»$**IIII**ccregion.  The region is defined as any pixel of
  403.             OldColor which has a path of pixels of OldColor or NewColor
  404.             with sides touching back to the seed point, (XSeed, YSeed).
  405.             Therefore, only pixels of OldColor are modified and no other
  406.             information is changed.
  407.  
  408.             SEE ALSO
  409.  
  410.             DRWFILLBOX, DRWFILLCIRCLE, DRWFILLELLIPSE, FILLAREA,
  411.             FILLCONVEXPOLY, FILLPAGE, FILLPOLY, FILLSCREEN, FILLVIEW,
  412.             SETVIEW
  413.  
  414.             EXAMPL(HNxHHO$B<BBBB<$<BBBB<<BBBB<$BBBBBF:0BBBBF:$BBBF:B<""AAA""AAAAA"<B@@B<" <2\A">>xDDxDNDD <` <>BB= > <BBBB< BBBBF:2L\bBBBB&AaQIECA8$>""">0@@A>@@@ b$(. b$(*
  415.     $    $    $DDDDDDD¬U¬U¬U¬U¬U¬U¬Uw▌w▌w▌w▌w▌w▌w▌°°°⌠ⁿ°°⌠⌠ⁿ⌠⌠ⁿⁿ°°°    ≈  ≈  ≈≈         °                     ≡≡≡≡≡≡≡≡≡≡≡≡≡≡       7HH7"B\DBBRL~BB@@@@@@?R~!!~?DDDD8BBBB|@@Ç>P>III>"AA""AAA"Uw<DDDD86II6"EIQ"\ @@ "AAAAA> >     hH02L2L$$<H(,$<>>>>>>>         VMODE=VIDEOMODEGET
  416.             IF WHICHVGA = 0 THEN STOP
  417.             DUMMY=RES640
  418.             SETVIEW 100, 100, 539, 379
  419.             FILLVIEW 10
  420.             WHILE INKEY$ = ""
  421.             WEND
  422.             VIDEOMODESET VMODE
  423.             END
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.                                                                          63
  441.  
  442.  
  443.  
  444.  
  445.  
  446.           FONTGETINFO
  447.  
  448.             PROTOTYPE
  449.  
  450.             SUB FONTGETINFO (Width%, Height%)
  451.  
  452.             INPUT
  453.  
  454.             no input parameters
  455.     WEND
  456.             MOUSEEXIT
  457.             VIDEOMODESET VMODE
  458.             END
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.                                                                          86
  500.  
  501.  
  502.  
  503.  
  504.  
  505.           MOUSECURSORDEFAULT
  506.  
  507.             PROTOTYPE
  508.  
  509.             SUB MOUSECURSORDEFAULT ()
  510.  
  511.             INPUT
  512.  
  513.             no input parameters
  514.  
  515.             OUTPUT
  516.  
  517.             no value returned
  518.  
  519.             USAGE
  520.  
  521.             MOUSECURSORDEFAULT defines the mouse cursor to be a small
  522.        ,K$╖┼╘╤░XQ)σ┤ö≡÷┴─┤àñT┘,╘¬àñX9╘⌠àñ\9╘UÜ╢≤`9╘4a╘d9╘UTa╘h9╘ta╘l9╘Uöa╘p9╘┤a╘t┘PT±x┴îÇ╖0▓ïα│ÅαU┤ôα╡ùα╢¢α╖úΓ╘pǺΓ╕¡αë ╚┴πì°sKÉφb<$⌡▌ë     φë φë I1φë  Eφë $YφÆë (mφë ,üφë 0$òφë á⌐φë ñ╜φë I¿╤φë ¼σφë ░∙φÆë 4²ë ┤!²ë ╕$5²ë ╝I²ë └]²ë ⌐8q²ë <àⁿΦiǬ∙PÖÇ ¥Ç
  523. ⁿ░╨â@%8@ΓΦá╝╤░≡cÑÅ*$░╕≡ż≡τ╥m¿⌡ε    ╨@#µ≈$âh$âαra╨à`¥è∩Ç%Ç +─▀ TîcOî∩â°1<@  [$¿Ç¼ MMl·0ƒ Y¼─!%6a▐è ¥ì ßá+?±  P<îaTTV ╪iÇ¡≥░ `_ñ»%Çá᪠P█º»ε`éa∙É%H«┴íA%Gár∙É
  524. iw∙Éiφ`╧≥≡╤Çmⁿ▒
  525. ]ÆAáσw7░⌡∩    $·╟Ç√É&^`  ┐ $ⁿ  $■ $╒ nk$J-ÉQ1£PéBù »0αQ/Ñ4╜£░ºP≈Ñ4Ç⌡$(ª▀$@C]Æé≈└╕_SÇçÑ4=iÉ⌠ä╣<_np@Ñ45ò▒Y3ü¼Qí░.i>╠@5+┴╙É╛╙$@ #┴@«╦
  526. $╤
  527. #@Ñú4,p&e÷ü¼_ÇQºÑ4òQ  ü@;¡_áQ@e╠≥@mp!┤a╘O░√`Pñź ÇT°8ÿ!¼Åñ$½╙"q¿ PñCÇ¿α√└╥░eT"ß<p°%Pæ(╧%pδ¥/OêW0Ǽbφ φ B@[â¼8â≥µ≤(    ¿⌡%(Ç∩áTÿp+ óÜ▓0!Σ±(1±░┤ÖÇD└D0Å╡`   $ «îO@╧1
  528. a╝╤j-0ñ│`@╖bΦaT1═⌠╝╤Σ²¼±,1öíî9lÿ28ÇÅ`Γî¿P²$,N0┴O0a╫δ≤0σú`°î╖#0δ≡└X▄1»Σî(▒¥Ç█Ñ"qá√1CÇú╟╨º Å
  529. FT Θ²î└1ÇY0    w ²à░$@AÅ`╦Φ¼╘`▄1A  }┐Ç*5 ΩSδδî`¼îaδæ¼î5 1¿⌡Ω╜⌠ ¼¥╬ü└Qî1S╛≤î9╨iÇ,∙PU(}Ç$üÇ àÇ`σìÇ`QαÜBO$%ÿÇ╧"$Ç«Ç]É.┬\`%WÉ$  W0 ÄâO0]αG┬ur╩░£▒Q¢ú╔Ç≡°s?`X0╘`@ µWâ@╣aá εdq`¥9?Ç&+o0µyÄΣAÅuV(7P╬±@IdQ╕@Å┤@;Ç▓?Çò│CÇ┤╟╨╡KÇÄ30ⁿφ° ó╬ì+]Ä╦≡     Mö╝σ ²y5<!└▀óâ╝É3~mp    $<╛≤9Æ-2ⁿ≡@T,╞Σa,)Pæ└¥#¼╪Q┤S(¼@Aîa≡╤@Ö²±⌠KëD─┴▒▀0╨Ñ$╩-0 ╨ê*╙▓edm`î=3Kß-10è=≥≤²└£mîjy ÿe²ⁿ╨i╕e▓ΣmαÖ╢C%Ç*ê*0 EátQZ`mÄLP%    °üⁿªüNQ∙  T¿<qtWΩc z░ÅÇñΩçǪçÇ«;└<┐á¼¥. á?<Σscî)áí := 0;
  530.       end;
  531.     end;
  532.   end;
  533.   WaitToGo;
  534. end; { UserLineStylePlay }
  535.  
  536.  
  537. procedure SayGoodbye;
  538. { Say goodbye and then exit the program }
  539. var
  540.   ViewInfo : ViewPortType;
  541. begin
  542.   MainWindow('');
  543.   GetViewSettings(ViewInfo);
  544.   SetTextStyle(TriplexFont, HorizDir, 4);
  545.   SetTextJustify(CenterText, CenterText);
  546.   with ViewInfo do
  547.     OutTextXY((x2-x1) div 2, (y2-y1) div 2, 'That''s all folks!');
  548.   StatusLine('Press any key to quit...');
  549.   repeat until KeyPressed;
  550. end; { SayGoodbye }
  551.  
  552.  
  553. PROCEDURE SelectMode;
  554. VAR
  555.     choice1,choice2     : CHAR;
  556.    xsize,ysize            : WORD;
  557. BEGIN
  558.     (* Let's select a mode *)
  559.     ClrScr;
  560.     WriteLn('VESADEMO:');
  561.     WriteLn('1. 256 colors');
  562.     WriteLn('2. 32768 colors');
  563.     WriteLn('3. 65536 colors');
  564.     WriteLn('4. 16777216 colors');
  565.     WriteLn('Q uit');
  566.     WriteLn;
  567.     Write('Your choice: ');
  568.     REPEAT
  569.         ReadLn(choice1);
  570.       IF choice1 <> '1' THEN BEGIN
  571.           WriteLn('Sorry !');
  572.          WriteLn('This demo wasn''t written for more as 256 colors !');
  573.          WriteLn('You would only get a limited impression of the Hi-& TrueColor modes...');
  574.          WriteLn('Switching to 256 colors.');
  575.          choice1 := '1';
  576.       END;
  577.     UNTIL choice1 IN ['1'..'4','q'];
  578.     IF choice1 = 'q' THEN Halt;
  579.  
  580.     WriteLn;
  581.     WriteLn;
  582.     WriteLn('a. 320x200');
  583.     WriteLn('b. 640x480');
  584.     WriteLn('c. 800x600');
  585.     WriteLn('d. 1024x768');
  586.     WriteLn('e. 1280x1024');
  587.     WriteLn('Q uit');
  588.     WriteLn;
  589.     Write('Your choice: ');
  590.     REPEAT
  591.         ReadLn(choice2);
  592.     UNTIL choice2 IN ['a'..'e','q'];
  593.     IF choice2 = 'q' THEN Halt;
  594.  
  595.     CASE choice2 OF
  596.         'a' : BEGIN
  597.             xsize := 320;
  598.             ysize := 200;
  599.         END;
  600.         'b' : BEGIN
  601.             xsize := 640;
  602.             ysize := 480;
  603.         END;
  604.         'c' : BEGIN
  605.             xsize := 800;
  606.             ysize := 600;
  607.         END;
  608.         'd' : BEGIN
  609.             xsize := 1024;
  610.             ysize := 768;
  611.         END;
  612.         'e' : BEGIN
  613.             xsize := 1280;
  614.             ysize := 1024;
  615.         END;
  616.     END;
  617.     CASE choice1 OF
  618.         '1' : mode := FindVesaMode(xsize,ysize,8);
  619.         '2' : mode := FindVesaMode(xsize,ysize,15);
  620.         '3' : mode := FindVesaMode(xsize,ysize,16);
  621.         '4' : mode := FindVesaMode(xsize,ysize,24);
  622.     END;
  623.     IF mode = 0 THEN BEGIN
  624.         WriteLn('No such mode could be found !');
  625.         WriteLn('Switching to to 320x200.');
  626.         ReadKey;
  627.         mode := V320x200x256;
  628.     END;
  629. END;
  630.  
  631. begin { program body }
  632.   SelectMode;
  633.   Initialize;
  634.   ReportStatus;
  635.  
  636. {  AspectRatioPlay; }
  637.   FillEllipsePlay;
  638.   SectorPlay;
  639.   WriteModePlay;
  640.  
  641.   ColorPlay;
  642.   { PalettePlay only intended to work on these drivers: }
  643.   if (GraphDriver = EGA) or
  644.       (GraphDriver = EGA64) or
  645.       (GraphDriver = VGA) then
  646.      PalettePlay;
  647.   PutPixelPlay;
  648. {  PutImagePlay; }
  649.   RandBarPlay;
  650.   BarPlay;
  651.   Bar3DPlay;
  652.   ArcPlay;
  653.   CirclePlay;
  654.   PiePlay;
  655.   LineToPlay;
  656.   LineRelPlay;
  657. {  LineStylePlay; }
  658. {  UserLineStylePlay; }
  659.   TextDump;
  660.   TextPlay;
  661.   CrtModePlay;
  662.   FillStylePlay;
  663.   FillPatternPlay;
  664.   PolyPlay;
  665.   SayGoodbye;
  666. {  CloseGraph; }
  667.   CloseVesa;
  668. end.
  669. ***************************************************
  670.     '* SHOW D2ROTATE (ABOUT THE ORIGIN)
  671.     '****************************************************************∞╥≤c≤*φè#^│v/╒:j═φ0t+l▓ô"¬"g└≡?%ªêΣ│H╫½╫╜├¿U'╒⌐⌡ ßV?╩¬ujOΦçEZ1∞▐! ▄B╛Σ8║æ]1GlNÜ┐q▌▓;ô$ΦzE<cª*bEô#ä╧ñÅ"∩─LrdaÖ ╠º╫a^¥£å╬1~)@ëÖMδ╫0═6DäFê¬Çv┼ß╨kæpτ╪É)}ª 1w3╤╧ü⌡¥╓h▓╣≈ïÅaÑ[TⁿHqªÉ╝DKÄ─Y-∞tT╤Θ╨º╟╪.*ÇI9lΦ≈{πτcσ$τπßoFr╪╨∩┼╞╟;O2■e²LÜ4^N|╪½ÅO?╔°FOz`╟╟╟'<>>π$πΘù6·Xgî╖│°oîδπGƒd╝▀░?■╪╔_9L ⌡ôⁿq'æO▀ƒn4╔▀╚▄┼3pτ.òO°·}÷╕ⁿ±'æO?ít│!√8ßÑ≤/┐╣p┼≥┘E╦Vox╕cΦé5╟╚º╙$?√$≥ΘZεsî≡åìΓpKù¢ïß X╥ 9╞≈\µk┤O¥_ 5Üö\≤éÄ┌╤A[╤ÿáï┼éNⁿÅu16    g,%hc╙╨cD╨Vï┘R¢öKñR;8εáΣ╢╪ós╤π╡á└èxgzPÄMú╫yαºÉ+σJ¢i+▓â3╥    ═Ñ╙î^ºG▓█πérφçs %#(╗⌠?┼%u8≡6+QÉ))ò)Afw≈╣╪)B&4░åLXV:δät@Å.;5Φf╢Ät┐ΣJ╫─U8úÇ╟éö£╕p╔┴⌠vg╨╬╥é÷╪╣┬ΓI.ç≡^v╤ZΦÇ& ╒┌6ñô6XßNè╡╬E₧Ñ
  672. kIº╠▄A+╣╥éb²tæ-Y¡½αÑa═uuîÇ╢αêvhuª╡SÅ┤vèùú¥F;p<d⌐/F─d█éT%▓KΦû=q■öI┐ ┐╠6S$▒÷╚ENΩ¥Fû9╔┌R'╝ ╧φ└?g┬j▓0═/b╖₧─mûé╢┌»ÿÄë/·<éò■░╤╟╢├Xσ:╥P3Θ"╬Læsφ░┌öSö!╗¿*mN£WΣÇ£┤~#╗ææ≥RΩóh:à▌.æ≈╕▌v£äàd▒à╒├=░╖π║$howeg*╬    6ù▄ƒô╕φ░Ö╢qΘD>(w@úKεHÆ╛öúΣU
  673. éÜR╔╤W▄èê 2M%ó.▓SNÖA1ùJE╢║l]▓¿>\%└Å4ßO▄£â⌐& ê/)8vSP▀▓ôⁿææ√ü√ÑÄa⌠â╚4S╓╟P- ?Σá╕▓Næ*q╡UΘ▓≈^ñ·I.rúR&$Y^╚%è≡B┌≈Ceat
  674.     Color := RandColor;
  675.     SetColor(Color);
  676.     SetFillStyle(Random(CloseDotFill)+1, Color);
  677.     Bar3D(Random(MaxWidth), Random(MaxHeight),
  678.           Random(MaxWidth), Random(MaxHeight), 0, TopOff);
  679.   until KeyPressed;
  680.   WaitToGo;
  681. end; { RandBarPlay }
  682.  
  683. procedure ArcPlay;
  684. { Draw random arcs on the screen }
  685. var
  686.   MaxRadius : word;
  687.   EndAngle : word;
  688.   ArcInfo : ArcCoordsType;
  689. begin
  690.   MainWindow('Arc / GetArcCoords demonstration');
  691.   StatusLine('Esc aborts or press a key');
  692.   MaxRadius := MaxY div 10;
  693.   repeat
  694.     SetColor(RandColor);
  695.     EndAngle := Random(360);
  696.     SetLineStyle(SolidLn, 0, NormWidth);
  697.     Arc(Random(MaxX), Random(MaxY), Random(EndAngle), EndAngle, Random(MaxRadius));
  698.     GetArcCoords(ArcInfo);
  699.     with ArcInfo do
  700.     begin
  701.       Line(X, Y, XStart, YStart);
  702.       Line(X, Y, Xend, Yend);
  703.     end;
  704.   until KeyPressed;
  705.   WaitToGo;
  706. end; { ArcPlay }
  707.  
  708. procedure PutPixelPlay;
  709. { Demonstrate the PutPixel and GetPixel commands }
  710. const
  711.   Seed   = 1962; { A seed for the random number generator }
  712.   NumPts = 2000; { The number of pixels plotted }
  713.   Esc    = #27;
  714. var
  715.   I : word;
  716.   X, Y, Color : word;
  717.   XMax, YMax  : integer;
  718.   ViewInfo    : ViewPortType;
  719. begin
  720.   MainWindow('PutPixel / GetPixel demonstration');
  721.   StatusLine('Esc aborts or press a key...');
  722.  
  723.   GetViewSettings(ViewInfo);
  724.   with ViewInfo do
  725.   begin
  726.     XMax := (x2-x1-1);
  727.     YMax := (y2-y1-1);
  728.   end;
  729.  
  730.   while not KeyPressed do
  731.   begin
  732.     { Plot random pixels }
  733.     RandSeed := Seed;
  734.     I := 0;
  735.     while (not KeyPressed) and (I < NumPts) do
  736.     begin
  737.       Inc(I);
  738.         PutPixel(Random(XMax)+1, Random(YMax)+1, RandColor);
  739.     end;
  740.  
  741.     { Erase pixels }
  742.     RandSeed := Seed;
  743.     I := 0;
  744.     while (not KeyPressed) and (I < NumPts) do
  745.     begin
  746.       Inc(I);
  747.       X := Random(XMax)+1;
  748.       Y := Random(YMax)+1;
  749.       Color := GetPixel(X, Y);
  750.         if Color = RandColor then
  751.           PutPixel(X, Y, 0);
  752.      end;
  753.   end;
  754.   WaitToGo;
  755. end; { PutPixelPlay }
  756.  
  757. procedure PutImagePlay;
  758. { Demonstrate the GetImage and PutImage commands }
  759.  
  760. const
  761.   r  = 20;
  762.   StartX = 100;
  763.   StartY = 50;
  764.  
  765. var
  766.   CurPort : ViewPortType;
  767.  
  768. procedure MoveSaucer(var X, Y : integer; Width, Height : integer);
  769. var
  770.   Step : integer;
  771. begin
  772.   Step := Random(2*r);
  773.   if Odd(Step) then
  774.     Step := -Step;
  775.   X := X + Step;
  776.   Step := Random(r);
  777.   if Odd(Step) then
  778.     Step := -Step;
  779.   Y := Y + Step;
  780.  
  781.   { Make saucer bounce off viewport walls }
  782.   with CurPort do
  783.   begin
  784.     if (x1 + X + Width - 1 > x2) then
  785.       X := x2-x1 - Width + 1
  786.     else
  787.       if (X < 0) then
  788.         X := 0;
  789.     if (y1 + Y + Height - 1 > y2) then
  790.       Y := y2-y1 - Height + 1
  791.     else
  792.       if (Y < 0) then
  793.         Y := 0;
  794.   end;
  795. end; { MoveSaucer }
  796.  
  797. var
  798.   Pausetime : word;
  799.   Saucer    : pointer;
  800.   X, Y      : integer;
  801.   ulx, uly  : word;
  802.   lrx, lry  : word;
  803.   Size      : word;
  804.   I         : word;
  805. begin
  806.   ClearDevice;
  807.   FullPort;
  808.  
  809.   { PaintScreen }
  810.   ClearDevice;
  811.   MainWindow('GetImage / PutImage Demonstration');
  812.   StatusLine('Esc aborts or press a key...');
  813.   GetViewSettings(CurPort);
  814.  
  815.   { DrawSaucer }
  816.   Ellipse(StartX, StartY, 0, 360, r, (r div 3)+2);
  817.   Ellipse(StartX, StartY-4, 190, 357, r, r div 3);
  818.   Line(StartX+7, StartY-6, StartX+10, StartY-12);
  819.   Circle(StartX+10, StartY-12, 2);
  820.   Line(StartX-7, StartY-6, StartX-10, StartY-12);
  821.   Circle(StartX-10, StartY-12, 2);
  822.   SetFillStyle(SolidFill, MaxColor);
  823.   FloodFill(StartX+1, StartY+4, GetColor);
  824.  
  825.   { ReadSaucerImage }
  826.   ulx := StartX-(r+1);
  827.   uly := StartY-14;
  828.   lrx := StartX+(r+1);
  829.   lry := StartY+(r div 3)+3;
  830.  
  831.   Size := ImageSize(ulx, uly, lrx, lry);
  832.   GetMem(Saucer, Size);
  833.   GetImage(ulx, uly, lrx, lry, Saucer^);
  834. {  PutImage(ulx, uly, Saucer^, XORput);               { erase image }
  835.  
  836.   { Plot some "stars" }
  837.   for I := 1 to 1000 do
  838.      PutPixel(Random(MaxX), Random(MaxY), RandColor);
  839.   X := MaxX div 2;
  840.   Y := MaxY div 2;
  841.   PauseTime := 70;
  842.  
  843.   { Move the saucer around }
  844.   repeat
  845. {     PutImage(X, Y, Saucer^, XORput);                 { draw image }
  846.      Delay(PauseTime);
  847. {     PutImage(X, Y, Saucer^, XORput);                 { erase image }
  848.      MoveSaucer(X, Y, lrx - ulx + 1, lry - uly + 1);  { width/height }
  849.   until KeyPressed;
  850.   FreeMem(Saucer, size);
  851.   WaitToGo;
  852. end; { PutImagePlay }
  853.  
  854. procedure PolyPlay;
  855. { Draw random polygons with random fill styles on the screen }
  856. const
  857.   MaxPts = 5;
  858. type
  859.   PolygonType = array[1..MaxPts] of PointType;
  860. var
  861.   Poly : PolygonType;
  862.   I, Color : word;
  863. begin
  864.   MainWindow('FillPoly demonstration');
  865.   StatusLine('Esc aborts or press a key...');
  866.   repeat
  867.     Color := RandColor;
  868.     SetFillStyle(Random(11)+1, Color);
  869.     SetColor(Color);
  870.     for I := 1 to MaxPts do
  871.       with Poly[I] do
  872.       begin
  873.         X := Random(MaxX);
  874.         Y := Random(MaxY);
  875.       end;
  876.     FillPoly(MaxPts, Poly);
  877.   until KeyPressed;
  878.   WaitToGo;
  879. end; { PolyPlay }
  880.  
  881. procedure FillStylePlay;
  882. { Display all of the predefined fill styles available }
  883. var
  884.   Style    : word;
  885.   Width    : word;
  886.   Height   : word;
  887.   X, Y     : word;
  888.   I, J     : word;
  889.   ViewInfo : ViewPortType;
  890.  
  891. procedure DrawBox(X, Y : word);
  892. begin
  893.   SetFillStyle(Style, MaxColor);
  894.   with ViewInfo do
  895.     Bar(X, Y, X+Width, Y+Height);
  896.   Rectangle(X, Y, X+Width, Y+Height);
  897.   OutTextXY(X+(Width div 2), Y+Height+4, Int2Str(Style));
  898.   Inc(Style);
  899. end; { DrawBox }
  900.  
  901. begin
  902.   MainWindow('Pre-defined fill styles');
  903.   GetViewSettings(ViewInfo);
  904.   with ViewInfo do
  905.   begin
  906.     Width := 2 * ((x2+1) div 13);
  907.     Height := 2 * ((y2-10) div 10);
  908.   end;
  909.   X := Width div 2;
  910.   Y := Height div 2;
  911.   Style := 0;
  912.   for J := 1 to 3 do
  913.   begin
  914.     for I := 1 to 4 do
  915.     begin
  916.       DrawBox(X, Y);
  917.       Inc(X, (Width div 2) * 3);
  918.     end;
  919.     X := Width div 2;
  920.     Inc(Y, (Height div 2) * 3);
  921.   end;
  922.   SetTextJustify(LeftText, TopText);
  923.   WaitToGo;
  924. end; { FillStylePlay }
  925.  
  926. procedure FillPatternPlay;
  927. { Display some user defined fill patterns }
  928. const
  929.   Patterns : array[0..11] of FillPatternType = (
  930.   ($AA, $55, $AA, $55, $AA, $55, $AA, $55 üÖü üÖü  !BBäx!!!BBäx!BBäx"""DDêp""DDêp>"""BBääêp""!"BDäêêp>IÉÆ|      ° @≥î>00>><Dêx  !BBäx""DDêp&<"DDêê&22TTêêê$> $< @äêp>          ⁿBBBB<  @@Ç****DDDDDDDU¬U¬U¬U¬U¬U¬U¬▌w▌w▌w▌w▌w▌w▌w°°°≥■°°≥≥■≥≥■■°°°    ≤  ≤  ≤≤         °                     ≡≡≡≡≡≡≡≡≡≡≡≡≡≡       ;DDD;    $"Bdÿ>@@@>||>Ac]AAA1N"A""2,  `1NA"*III*<Bü üB<<BüüüB<A" \"QIE" < <BBBB  @@    ~ ?  @ÇB$$B ""A$$"AII6 üBr»$**IIII**ccregion.  The region is defined as any pixel of
  931.             OldColor which has a path of pixels of OldColor or NewColor
  932.             with sides touching back to the seed point, (XSeed, YSeed).
  933.             Therefore, only pixels of OldColor are modified and no other
  934.             information is changed.
  935.  
  936.             SEE ALSO
  937.  
  938.             DRWFILLBOX, DRWFILLCIRCLE, DRWFILLELLIPSE, FILLAREA,
  939.             FILLCONVEXPOLY, FILLPAGE, FILLPOLY, FILLSCREEN, FILLVIEW,
  940.             SETVIEW
  941.  
  942.             EXAMPL(HNxHHO$B<BBBB<$<BBBB<<BBBB<$BBBBBF:0BBBBF:$BBBF:B<""AAA""AAAAA"<B@@B<" <2\A">>xDDxDNDD <` <>BB= > <BBBB< BBBBF:2L\bBBBB&AaQIECA8$>""">0@@A>@@@ b$(. b$(*
  943.     $    $    $DDDDDDD¬U¬U¬U¬U¬U¬U¬Uw▌w▌w▌w▌w▌w▌w▌°°°⌠ⁿ°°⌠⌠ⁿ⌠⌠ⁿⁿ°°°    ≈  ≈  ≈≈         °                     ≡≡≡≡≡≡≡≡≡≡≡≡≡≡       7HH7"B\DBBRL~BB@@@@@@?R~!!~?DDDD8BBBB|@@Ç>P>III>"AA""AAA"Uw<DDDD86II6"EIQ"\ @@ "AAAAA> >     hH02L2L$$<H(,$<>>>>>>>         VMODE=VIDEOMODEGET
  944.             IF WHICHVGA = 0 THEN STOP
  945.             DUMMY=RES640
  946.             SETVIEW 100, 100, 539, 379
  947.             FILLVIEW 10
  948.             WHILE INKEY$ = ""
  949.             WEND
  950.             VIDEOMODESET VMODE
  951.             END
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.  
  961.  
  962.  
  963.  
  964.  
  965.  
  966.  
  967.  
  968.                                                                          63
  969.  
  970.  
  971.  
  972.  
  973.  
  974.           FONTGETINFO
  975.  
  976.             PROTOTYPE
  977.  
  978.             SUB FONTGETINFO (Width%, Height%)
  979.  
  980.             INPUT
  981.  
  982.             no input parameters
  983.     WEND
  984.             MOUSEEXIT
  985.             VIDEOMODESET VMODE
  986.             END
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996.  
  997.  
  998.  
  999.  
  1000.  
  1001.  
  1002.  
  1003.  
  1004.  
  1005.  
  1006.  
  1007.  
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.  
  1021.  
  1022.  
  1023.  
  1024.  
  1025.  
  1026.  
  1027.                                                                          86
  1028.  
  1029.  
  1030.  
  1031.  
  1032.  
  1033.           MOUSECURSORDEFAULT
  1034.  
  1035.             PROTOTYPE
  1036.  
  1037.             SUB MOUSECURSORDEFAULT ()
  1038.  
  1039.             INPUT
  1040.  
  1041.             no input parameters
  1042.  
  1043.             OUTPUT
  1044.  
  1045.             no value returned
  1046.  
  1047.             USAGE
  1048.  
  1049.             MOUSECURSORDEFAULT defines the mouse cursor to be a small
  1050.        ,K$╖┼╘╤░XQ)σ┤ö≡÷┴─┤àñT┘,╘¬àñX9╘⌠àñ\9╘UÜ╢≤`9╘4a╘d9╘UTa╘h9╘ta╘l9╘Uöa╘p9╘┤a╘t┘PT±x┴îÇ╖0▓ïα│ÅαU┤ôα╡ùα╢¢α╖úΓ╘pǺΓ╕¡αë ╚┴πì°sKÉφb<$⌡▌ë     φë φë I1φë  Eφë $YφÆë (mφë ,üφë 0$òφë á⌐φë ñ╜φë I¿╤φë ¼σφë ░∙φÆë 4²ë ┤!²ë ╕$5²ë ╝I²ë └]²ë ⌐8q²ë <àⁿΦiǬ∙PÖÇ ¥Ç
  1051. ⁿ░╨â@%8@ΓΦá╝╤░≡cÑÅ*$░╕≡ż≡τ╥m¿⌡ε    ╨@#µ≈$âh$âαra╨à`¥è∩Ç%Ç +─▀ TîcOî∩â°1<@  [$¿Ç¼ MMl·0ƒ Y¼─!%6a▐è ¥ì ßá+?±  P<îaTTV ╪iÇ¡≥░ `_ñ»%Çá᪠P█º»ε`éa∙É%H«┴íA%Gár∙É
  1052. iw∙Éiφ`╧≥≡╤Çmⁿ▒
  1053. ]ÆAáσw7░⌡∩    $·╟Ç√É&^`  ┐ $ⁿ  $■ $╒ nk$J-ÉQ1£PéBù »0αQ/Ñ4╜£░ºP≈Ñ4Ç⌡$(ª▀$@C]Æé≈└╕_SÇçÑ4=iÉ⌠ä╣<_np@Ñ45ò▒Y3ü¼Qí░.i>╠@5+┴╙É╛╙$@ #┴@«╦
  1054. $╤
  1055. #@Ñú4,p&e÷ü¼_ÇQºÑ4òQ  ü@;¡_áQ@e╠≥@mp!┤a╘O░√`Pñź ÇT°8ÿ!¼Åñ$½╙"q¿ PñCÇ¿α√└╥░eT"ß<p°%Pæ(╧%pδ¥/OêW0Ǽbφ φ B@[â¼8â≥µ≤(    ¿⌡%(Ç∩áTÿp+ óÜ▓0!Σ±(1±░┤ÖÇD└D0Å╡`   $ «îO@╧1
  1056. a╝╤j-0ñ│`@╖bΦaT1═⌠╝╤Σ²¼±,1öíî9lÿ28ÇÅ`Γî¿P²$,N0┴O0a╫δ≤0σú`°î╖#0δ≡└X▄1»Σî(▒¥Ç█Ñ"qá√1CÇú╟╨º Å
  1057. FT Θ²î└1ÇY0    w ²à░$@AÅ`╦Φ¼╘`▄1A  }┐Ç*5 ΩSδδî`¼îaδæ¼î5 1¿⌡Ω╜⌠ ¼¥╬ü└Qî1S╛≤î9╨iÇ,∙PU(}Ç$üÇ àÇ`σìÇ`QαÜBO$%ÿÇ╧"$Ç«Ç]É.┬\`%WÉ$  W0 ÄâO0]αG┬ur╩░£▒Q¢ú╔Ç≡°s?`X0╘`@ µWâ@╣aá εdq`¥9?Ç&+o0µyÄΣAÅuV(7P╬±@IdQ╕@Å┤@;Ç▓?Çò│CÇ┤╟╨╡KÇÄ30ⁿφ° ó╬ì+]Ä╦≡     Mö╝σ ²y5<!└▀óâ╝É3~mp    $<╛≤9Æ-2ⁿ≡@T,╞Σa,)Pæ└¥#¼╪Q┤S(¼@Aîa≡╤@Ö²±⌠KëD─┴▒▀0╨Ñ$╩-0 ╨ê*╙▓edm`î=3Kß-10è=≥≤²└£mîjy ÿe²ⁿ╨i╕e▓ΣmαÖ╢C%Ç*ê*0 EátQZ`mÄLP%    °üⁿªüNQ∙  T¿<qtWΩc z░ÅÇñΩçǪçÇ«;└<┐á¼¥. á?<Σscî)áí := 0;
  1058.       end;
  1059.     end;
  1060.   end;
  1061.   WaitToGo;
  1062. end; { UserLineStylePlay }
  1063.  
  1064.  
  1065. procedure SayGoodbye;
  1066. { Say goodbye and then exit the program }
  1067. var
  1068.   ViewInfo : ViewPortType;
  1069. begin
  1070.   MainWindow('');
  1071.   GetViewSettings(ViewInfo);
  1072.   SetTextStyle(TriplexFont, HorizDir, 4);
  1073.   SetTextJustify(CenterText, CenterText);
  1074.   with ViewInfo do
  1075.     OutTextXY((x2-x1) div 2, (y2-y1) div 2, 'That''s all folks!');
  1076.   StatusLine('Press any key to quit...');
  1077.   repeat until KeyPressed;
  1078. end; { SayGoodbye }
  1079.  
  1080.  
  1081. PROCEDURE SelectMode;
  1082. VAR
  1083.     choice1,choice2     : CHAR;
  1084.    xsize,ysize            : WORD;
  1085. BEGIN
  1086.     (* Let's select a mode *)
  1087.     ClrScr;
  1088.     WriteLn('VESADEMO:');
  1089.     WriteLn('1. 256 colors');
  1090.     WriteLn('2. 32768 colors');
  1091.     WriteLn('3. 65536 colors');
  1092.     WriteLn('4. 16777216 colors');
  1093.     WriteLn('Q uit');
  1094.     WriteLn;
  1095.     Write('Your choice: ');
  1096.     REPEAT
  1097.         ReadLn(choice1);
  1098.       IF choice1 <> '1' THEN BEGIN
  1099.           WriteLn('Sorry !');
  1100.          WriteLn('This demo wasn''t written for more as 256 colors !');
  1101.          WriteLn('You would only get a limited impression of the Hi-& TrueColor modes...');
  1102.          WriteLn('Switching to 256 colors.');
  1103.          choice1 := '1';
  1104.       END;
  1105.     UNTIL choice1 IN ['1'..'4','q'];
  1106.     IF choice1 = 'q' THEN Halt;
  1107.  
  1108.     WriteLn;
  1109.     WriteLn;
  1110.     WriteLn('a. 320x200');
  1111.     WriteLn('b. 640x480');
  1112.     WriteLn('c. 800x600');
  1113.     WriteLn('d. 1024x768');
  1114.     WriteLn('e. 1280x1024');
  1115.     WriteLn('Q uit');
  1116.     WriteLn;
  1117.     Write('Your choice: ');
  1118.     REPEAT
  1119.         ReadLn(choice2);
  1120.     UNTIL choice2 IN ['a'..'e','q'];
  1121.     IF choice2 = 'q' THEN Halt;
  1122.  
  1123.     CASE choice2 OF
  1124.         'a' : BEGIN
  1125.             xsize := 320;
  1126.             ysize := 200;
  1127.         END;
  1128.         'b' : BEGIN
  1129.             xsize := 640;
  1130.             ysize := 480;
  1131.         END;
  1132.         'c' : BEGIN
  1133.             xsize := 800;
  1134.             ysize := 600;
  1135.         END;
  1136.         'd' : BEGIN
  1137.             xsize := 1024;
  1138.             ysize := 768;
  1139.         END;
  1140.         'e' : BEGIN
  1141.             xsize := 1280;
  1142.             ysize := 1024;
  1143.         END;
  1144.     END;
  1145.     CASE choice1 OF
  1146.         '1' : mode := FindVesaMode(xsize,ysize,8);
  1147.         '2' : mode := FindVesaMode(xsize,ysize,15);
  1148.         '3' : mode := FindVesaMode(xsize,ysize,16);
  1149.         '4' : mode := FindVesaMode(xsize,ysize,24);
  1150.     END;
  1151.     IF mode = 0 THEN BEGIN
  1152.         WriteLn('No such mode could be found !');
  1153.         WriteLn('Switching to to 320x200.');
  1154.         ReadKey;
  1155.         mode := V320x200x256;
  1156.     END;
  1157. END;
  1158.  
  1159. begin { program body }
  1160.   SelectMode;
  1161.   Initialize;
  1162.   ReportStatus;
  1163.  
  1164. {  AspectRatioPlay; }
  1165.   FillEllipsePlay;
  1166.   SectorPlay;
  1167.   WriteModePlay;
  1168.  
  1169.   ColorPlay;
  1170.   { PalettePlay only intended to work on these drivers: }
  1171.   if (GraphDriver = EGA) or
  1172.       (GraphDriver = EGA64) or
  1173.       (GraphDriver = VGA) then
  1174.      PalettePlay;
  1175.   PutPixelPlay;
  1176. {  PutImagePlay; }
  1177.   RandBarPlay;
  1178.   BarPlay;
  1179.   Bar3DPlay;
  1180.   ArcPlay;
  1181.   CirclePlay;
  1182.   PiePlay;
  1183.   LineToPlay;
  1184.   LineRelPlay;
  1185. {  LineStylePlay; }
  1186. {  UserLineStylePlay; }
  1187.   TextDump;
  1188.   TextPlay;
  1189.   CrtModePlay;
  1190.   FillStylePlay;
  1191.   FillPatternPlay;
  1192.   PolyPlay;
  1193.   SayGoodbye;
  1194. {  CloseGraph; }
  1195.   CloseVesa;
  1196. end.
  1197. ***************************************************
  1198.     '* SHOW D2ROTATE (ABOUT THE ORIGIN)
  1199.     '****************************************************************∞╥≤c≤*φè#^│v/╒:j═φ0t+l▓ô"¬"g└≡?%ªêΣ│H╫½╫╜├¿U'╒⌐⌡ ßV?╩¬ujOΦçEZ1∞▐! ▄B╛Σ8║æ]1GlNÜ┐q▌▓;ô$ΦzE<cª*bEô#ä╧ñÅ"∩─LrdaÖ ╠º╫a^¥£å╬1~)@ëÖMδ╫0═6DäFê¬Çv┼ß╨kæpτ╪É)}ª 1w3╤╧ü⌡¥╓h▓╣≈ïÅaÑ[TⁿHqªÉ╝DKÄ─Y-∞tT╤Θ╨º╟╪.*ÇI9lΦ≈{πτcσ$τπßoFr╪╨∩┼╞╟;O2■e²LÜ4^N|╪½ÅO?╔°FOz`╟╟╟'<>>π$πΘù6·Xgî╖│°oîδπGƒd╝▀░?■╪╔_9L ⌡ôⁿq'æO▀ƒn4╔▀╚▄┼3pτ.òO°·}÷╕ⁿ±'æO?ít│!√8ßÑ≤/┐╣p┼≥┘E╦Vox╕cΦé5╟╚º╙$?√$≥ΘZεsî≡åìΓpKù¢ïß X╥ 9╞≈\µk┤O¥_ 5Üö\≤éÄ┌╤A[╤ÿáï┼éNⁿÅu16    g,%hc╙╨cD╨Vï┘R¢öKñR;8εáΣ╢╪ós╤π╡á└èxgzPÄMú╫yαºÉ+σJ¢i+▓â3╥    ═Ñ╙î^ºG▓█πérφçs %#(╗⌠?┼%u8≡6+QÉ))ò)Afw≈╣╪)B&4░åLXV:δät@Å.;5Φf╢Ät┐ΣJ╫─U8úÇ╟éö£╕p╔┴⌠vg╨╬╥é÷╪╣┬ΓI.ç≡^v╤ZΦÇ& ╒┌6ñô6XßNè╡╬E₧Ñ
  1200. kIº╠▄A+╣╥éb²tæ-Y¡½αÑa═uuîÇ╢αêvhuª╡SÅ┤vèùú¥F;p<d⌐/F─d█éT%▓KΦû=q■öI┐ ┐╠6S$▒÷╚ENΩ¥Fû9╔┌R'╝ ╧φ└?g┬j▓0═/b╖₧─mûé╢┌»ÿÄë/·<éò■░╤╟╢├Xσ:╥P3Θ"╬Læsφ░┌öSö!╗¿*mN£WΣÇ£┤~#╗ææ≥RΩóh:à▌.æ≈╕▌v£äàd▒à╒├=░╖π║$howeg*╬    6ù▄ƒô╕φ░Ö╢qΘD>(w@úKεHÆ╛öúΣU
  1201. éÜR╔╤W▄èê 2M%ó.▓SNÖA1ùJE╢║l]▓¿>\%└Å4ßO▄£â⌐& ê/)8vSP▀▓ôⁿææ√ü√ÑÄa⌠â╚4S╓╟P- ?Σá╕▓Næ*q╡UΘ▓≈^ñ·I.rúR&$Y^╚%è≡B┌≈Ceat
  1202.     Color := RandColor;
  1203.     SetColor(Color);
  1204.     SetFillStyle(Random(CloseDotFill)+1, Color);
  1205.     Bar3D(Random(MaxWidth), Random(MaxHeight),
  1206.           Random(MaxWidth), Random(MaxHeight), 0, TopOff);
  1207.   until KeyPressed;
  1208.   WaitToGo;
  1209. end; { RandBarPlay }
  1210.  
  1211. procedure ArcPlay;
  1212. { Draw random arcs on the screen }
  1213. var
  1214.   MaxRadius : word;
  1215.   EndAngle : word;
  1216.   ArcInfo : ArcCoordsType;
  1217. begin
  1218.   MainWindow('Arc / GetArcCoords demonstration');
  1219.   StatusLine('Esc aborts or press a key');
  1220.   MaxRadius := MaxY div 10;
  1221.   repeat
  1222.     SetColor(RandColor);
  1223.     EndAngle := Random(360);
  1224.     SetLineStyle(SolidLn, 0, NormWidth);
  1225.     Arc(Random(MaxX), Random(MaxY), Random(EndAngle), EndAngle, Random(MaxRadius));
  1226.     GetArcCoords(ArcInfo);
  1227.     with ArcInfo do
  1228.     begin
  1229.       Line(X, Y, XStart, YStart);
  1230.       Line(X, Y, Xend, Yend);
  1231.     end;
  1232.   until KeyPressed;
  1233.   WaitToGo;
  1234. end; { ArcPlay }
  1235.  
  1236. procedure PutPixelPlay;
  1237. { Demonstrate the PutPixel and GetPixel commands }
  1238. const
  1239.   Seed   = 1962; { A seed for the random number generator }
  1240.   NumPts = 2000; { The number of pixels plotted }
  1241.   Esc    = #27;
  1242. var
  1243.   I : word;
  1244.   X, Y, Color : word;
  1245.   XMax, YMax  : integer;
  1246.   ViewInfo    : ViewPortType;
  1247. begin
  1248.   MainWindow('PutPixel / GetPixel demonstration');
  1249.   StatusLine('Esc aborts or press a key...');
  1250.  
  1251.   GetViewSettings(ViewInfo);
  1252.   with ViewInfo do
  1253.   begin
  1254.     XMax := (x2-x1-1);
  1255.     YMax := (y2-y1-1);
  1256.   end;
  1257.  
  1258.   while not KeyPressed do
  1259.   begin
  1260.     { Plot random pixels }
  1261.     RandSeed := Seed;
  1262.     I := 0;
  1263.     while (not KeyPre